import java.util.Stack;

/**
 * Created with IntelliJ IDEA.
 * Description: 后缀表达式计算
 * User: liangyuanzhang
 * Date: 2025-3-26
 * Time: 17:28
 */

// 中缀表达式 转换成 后缀表达式
/*
安卓课设 --> 计算器
这题是给定了一个后缀表达式让我们计算结果 --> 申请栈遍历它
取出两个数字，一个放在右操作数，一个放在左操作数
*/

public class Test {
    public int evalRPN(String[] tokens) {
        Stack<Integer> stack = new Stack<>();
        for(String str: tokens){
            if(!isOperator(str)){
                int x = Integer.parseInt(str); // 把一个字符串变成整数
                stack.push(x);
            }else{ //如果是运算符 要弹出栈顶的两个元素
                int val2 = stack.pop(); // val2是右操作数
                int val1 = stack.pop(); // val1是左操作数
                switch(str){
                    case "+":
                        stack.push(val1+val2); // 直接把计算后的值放到栈里
                        break;
                    case "-":
                        stack.push(val1-val2);
                        break;
                    case "*":
                        stack.push(val1*val2);
                        break;
                    case "/":
                        stack.push(val1/val2);
                        break;
                }
            }
        }
        return stack.pop();
    }

    private boolean isOperator(String ch){  // 判断是不是操作符
        if(ch.equals("+") || ch.equals("-")
                || ch.equals("*") || ch.equals("/")){
            return true;
        }
        return false;
    }
}